#ifndef __MQTT_H
#define __MQTT_H

//包含头文件
#include <stdio.h>
#include <string.h>
#include <sys/types.h>      
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
#include <unistd.h>

//宏定义
//MQTT报文协议类型
typedef enum 
{
    CONNECT=1,  //请求连接 客户端-->服务器
    CONNACK,    //连接确认 服务端-->客户端
    PUNLISH,    //发布消息 服务端<->客户端
    PUBACK,     //Qos1 发布确认 服务端-->客户端
    PUBREC,     //Qos2 发布收到 服务端-->客户端
    PUBREL,     //Qos2 发布释放 客户端-->服务器
    PUBCOMP,    //Qos2 发布完成 服务端-->客户端
    SUBSCRIBE,  //订阅请求 客户端-->服务器
    SUBACK,     //订阅确认 服务端-->客户端
    UNSUBSCRIBE,//取消订阅 客户端-->服务器
    UNSUBACK,   //取消订阅确认 服务端-->客户端
    PINGREQ,    
    PINRESP,
    DISCONNECT,
}MqttType;


//连接到MQTT Broker的信息
#define MQTT_CLIENTID			"MQTT_FX_Client1"
#define MQTT_USARNAME			"kdm"
#define MQTT_PASSWD				"123456"
#define	MQTT_PUBLISH_TOPIC		""
#define MQTT_SUBSCRIBE_TOPIC	"home/garden/fountain"  //本地MQTT服务器测试的订阅主题  用的MQTT.fx软件测试



#define BYTE0(dwTemp)       (*( char *)(&dwTemp))
#define BYTE1(dwTemp)       (*((char *)(&dwTemp) + 1))
#define BYTE2(dwTemp)       (*((char *)(&dwTemp) + 2))
#define BYTE3(dwTemp)       (*((char *)(&dwTemp) + 3))
	
#define CONNECT_MQTT_LED(x)	PBout(3)=(x)?0:1

//变量声明

//函数声明
int mqtt_connect_server(char *mqttserver_ip, unsigned short mqttserver_port);//配置MQTT服务器
int32_t mqtt_connect(int socket_fd,char *client_id,char *user_name,char *password);	//MQTT连接服务器
int32_t mqtt_subscribe_topic(int socket_fd,char *topic,uint8_t qos,uint8_t whether);	//MQTT消息订阅
uint32_t mqtt_publish_data(int socket_fd,char *topic, char *message, uint8_t qos);	//MQTT消息发布
int32_t mqtt_send_heart(int socket_fd);											//MQTT发送心跳包
void mqtt_disconnect(int socket_fd);												//MQTT无条件断开
#endif
